package by.ins.life.evolution;

import java.io.Serializable;

import by.ins.life.ILife;
import by.ins.life.ILifeInitializer;
import by.ins.life.ISolver;

public interface ILifeEvoluter<NuclearType> extends Serializable{
	
	public static enum EvoluterStatus{
		STOPPED,
		RUNNING		
	}
	
	
	public abstract String getName();
	
	public abstract void setName(String name);
	
	public abstract void evolute();
	
	public abstract void evolute(int evolutionCount);

	public abstract ILife<NuclearType> getLife();

	public abstract void setLife(ILife<NuclearType> life);

	public abstract ISetEvoluter<NuclearType> getSetEvoluter();

	public abstract void setSetEvoluter(ISetEvoluter<NuclearType> evoluter);

	public abstract ISolver<NuclearType> getSolver();

	public abstract void setSolver(ISolver<NuclearType> solver);
	
	public abstract void setLifeInitializer(ILifeInitializer<NuclearType> initializer);
	
	public abstract ILifeInitializer<NuclearType> getLifeInitializer();
	
	public abstract TestGoalsProviders<NuclearType> getTestGoalProviders();
	
	public abstract void setTestGoalProviders(TestGoalsProviders<NuclearType> provider);
	
	public abstract EvoluterStatus getStatus();
	
//	public boolean isLifeInitialized();
//	public void initLife();
	

}